bitkeeper revision 1.1691.1.1 (42a6ada344SrT9VotpxjpMFmC9Wsng)
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 8 Jun 2005 08:34:43 +0000 (08:34 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 8 Jun 2005 08:34:43 +0000 (08:34 +0000)
Increase max cmdline to 1024 characters.
Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.4.30-xen-sparse/arch/xen/kernel/setup.c
linux-2.6.11-xen-sparse/arch/xen/i386/kernel/setup.c
linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/setup.c
tools/libxc/xc_linux_build.c
tools/libxc/xc_plan9_build.c
xen/arch/x86/domain_build.c
xen/arch/x86/setup.c
xen/include/public/xen.h

index 8fcbf0d7200fa33f3c899aa9462e7f6e6ab1e7f6..230e0bb66ab8e1cdcfe7da88d78225d0637dd265 100644 (file)
@@ -113,7 +113,7 @@ int enable_acpi_smp_table;
 /* Raw start-of-day parameters from the hypervisor. */
 union xen_start_info_union xen_start_info_union;
 
-#define COMMAND_LINE_SIZE 256
+#define COMMAND_LINE_SIZE MAX_GUEST_CMDLINE
 static char command_line[COMMAND_LINE_SIZE];
 char saved_command_line[COMMAND_LINE_SIZE];
 
index c5f6c665fba19a56f113cd4010743b3fb9ad844b..938bcabd8613f0c3075dfae4588f83d0579cc9b0 100644 (file)
@@ -699,12 +699,14 @@ static inline void copy_edd(void)
 static void __init parse_cmdline_early (char ** cmdline_p)
 {
        char c = ' ', *to = command_line, *from = saved_command_line;
-       int len = 0;
+       int len = 0, max_cmdline;
        int userdef = 0;
 
-       memcpy(saved_command_line, xen_start_info.cmd_line, MAX_CMDLINE);
+       if ((max_cmdline = MAX_GUEST_CMDLINE) > COMMAND_LINE_SIZE)
+               max_cmdline = COMMAND_LINE_SIZE;
+       memcpy(saved_command_line, xen_start_info.cmd_line, max_cmdline);
        /* Save unparsed command line copy for /proc/cmdline */
-       saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+       saved_command_line[max_cmdline-1] = '\0';
 
        for (;;) {
                if (c != ' ')
index 8638aaa1075af42f3660213acb56bd9cc64c6c77..8951d61c2a8046bac67d23938ae88e7a3e254335 100644 (file)
@@ -318,12 +318,13 @@ union xen_start_info_union xen_start_info_union;
 static __init void parse_cmdline_early (char ** cmdline_p)
 {
        char c = ' ', *to = command_line, *from = COMMAND_LINE;
-       int len = 0;
+       int len = 0, max_cmdline;
 
-       memcpy(saved_command_line, xen_start_info.cmd_line, MAX_CMDLINE);
+       if ((max_cmdline = MAX_GUEST_CMDLINE) > COMMAND_LINE_SIZE)
+               max_cmdline = COMMAND_LINE_SIZE;
+       memcpy(saved_command_line, xen_start_info.cmd_line, max_cmdline);
        /* Save unparsed command line copy for /proc/cmdline */
-       memcpy(saved_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
-       saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+       saved_command_line[max_cmdline-1] = '\0';
 
        for (;;) {
                if (c != ' ') 
index 83e7ca8d4c253f49044d78a05851dc033b8a112e..012d66ae93ee40abaefa1666e9c82367992e79f4 100644 (file)
@@ -382,8 +382,8 @@ static int setup_guest(int xc_handle,
         start_info->mod_start    = vinitrd_start;
         start_info->mod_len      = initrd_len;
     }
-    strncpy((char *)start_info->cmd_line, cmdline, MAX_CMDLINE);
-    start_info->cmd_line[MAX_CMDLINE-1] = '\0';
+    strncpy((char *)start_info->cmd_line, cmdline, MAX_GUEST_CMDLINE);
+    start_info->cmd_line[MAX_GUEST_CMDLINE-1] = '\0';
     munmap(start_info, PAGE_SIZE);
 
     /* shared_info page starts its life empty. */
index 544485aa423cde2538c9f86fc5c9e91bb2d7f792..7f697d211516edda31f54608dfd7838f09d9353b 100644 (file)
@@ -357,8 +357,8 @@ setup_guest(int xc_handle,
        start_info->flags = 0;
        DPRINTF((" control event channel is %d\n", control_evtchn));
        start_info->domain_controller_evtchn = control_evtchn;
-       strncpy((char *)start_info->cmd_line, cmdline, MAX_CMDLINE);
-       start_info->cmd_line[MAX_CMDLINE - 1] = '\0';
+       strncpy((char *)start_info->cmd_line, cmdline, MAX_GUEST_CMDLINE);
+       start_info->cmd_line[MAX_GUEST_CMDLINE - 1] = '\0';
        munmap(start_info, PAGE_SIZE);
 
        DPRINTF(("done setting up start_info\n"));
index b4012c1660a360bf54628c671b1340cb2a634d0b..a74fa1766ebc5c1ebb0f94d8fb708df1eb759f23 100644 (file)
@@ -74,7 +74,6 @@ int construct_dom0(struct domain *d,
                    unsigned long _initrd_start, unsigned long initrd_len,
                    char *cmdline)
 {
-    char *dst;
     int i, rc;
     unsigned long pfn, mfn;
     unsigned long nr_pages;
@@ -580,17 +579,9 @@ int construct_dom0(struct domain *d,
                si->mod_len, si->mod_start);
     }
 
-    dst = (char *)si->cmd_line;
+    memset(si->cmd_line, 0, sizeof(si->cmd_line));
     if ( cmdline != NULL )
-    {
-        for ( i = 0; i < 255; i++ )
-        {
-            if ( cmdline[i] == '\0' )
-                break;
-            *dst++ = cmdline[i];
-        }
-    }
-    *dst = '\0';
+        strncpy(si->cmd_line, cmdline, sizeof(si->cmd_line)-1);
 
     /* Reinstate the caller's page tables. */
     write_ptbase(current);
index 913f3082be757a836355d4347f83807c04be0469..a1818545faa2b5fbacfb0389da6ba2baa168293d 100644 (file)
@@ -409,7 +409,7 @@ void __init __start_xen(multiboot_info_t *mbi)
     cmdline = (char *)(mod[0].string ? __va(mod[0].string) : NULL);
     if ( cmdline != NULL )
     {
-        static char dom0_cmdline[256];
+        static char dom0_cmdline[MAX_GUEST_CMDLINE];
 
         /* Skip past the image name. */
         while ( *cmdline == ' ' ) cmdline++;
index f11464142488a1be21ec1cc38e2983a241598084..19b9ae58bde9446d79acb50f1978a2a7cbaabc0f 100644 (file)
@@ -430,7 +430,7 @@ typedef struct shared_info_st
  *     extended by an extra 4MB to ensure this.
  */
 
-#define MAX_CMDLINE 256
+#define MAX_GUEST_CMDLINE 1024
 typedef struct {
     /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME.     */
     memory_t nr_pages;        /*  0: Total pages allocated to this domain. */
@@ -451,8 +451,8 @@ typedef struct {
     _MEMORY_PADDING(F);
     memory_t mod_len;         /* 56: Size (bytes) of pre-loaded module.    */
     _MEMORY_PADDING(G);
-    s8 cmd_line[MAX_CMDLINE]; /* 64 */
-} PACKED start_info_t; /* 320 bytes */
+    s8 cmd_line[MAX_GUEST_CMDLINE]; /* 64 */
+} PACKED start_info_t; /* 1088 bytes */
 
 /* These flags are passed in the 'flags' field of start_info_t. */
 #define SIF_PRIVILEGED    (1<<0)  /* Is the domain privileged? */